package com.fileOperate;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

/**
 *
 * @Description: 按行读取文本数据
 * 1.每次读取一行数据，循环直到文件结束
 * 2.对数据进行筛选,将有用的数据保存
 * {
 *  I 忽略前几行内容直到”End of HEADER"
 *  II  忽略“10  6 20  0  1  0.0000000  0 11G14G12G30G04G32G16G02G23G20G29G31”这种数据
 *      忽略“                                G26”这种数据
 *      忽略“        48.750”这种数据
 *      前两种用是否包含"G"来筛选，用到了字符串方法中的  contain()函数
 *      第三种用是否以”        “开头来筛选 用到了字符串方法中的  startWith()函数0.
 *      +
 *  III " 117875970.037 8  91851391.71947  22431050.980    22431047.580          48.500"
 *      将单个数据从这一整行数据中筛选出来 
 *      用字符串中的subString(startPosition,endPosition)方法，提供所需要的子串的开始，结束位置，获取子串
 *      最后将所需要的数据统一保存在另一数组中
 *
 */
public class readData {
    public static void main(String[] args) throws IOException {
        try{
            BufferedReader in=new BufferedReader(new FileReader("D:\\temp\\test\\a-60-s1-b1-11nm-t5.ac"));//打开文件创建数据流
            String str; //定义String变量用来保存每一次读到的每一行的数据
            String[] s=new String[0];//定义数组用来保存需要的数据
            /*忽略前几行的内容*/
            while((str=in.readLine())!=null){
                if(str.contains("0Thermal conductivity table")){//当包含次字符串跳出循环
                    break;
                }
            }
            //对下面的数据进行筛选
            while((str=in.readLine())!=null){
                if (str.contains("Edit of control component input data")){
                    break;
                }
                if(str.contains("E+")){//筛选条件
                    if(str.length()>0){
                        s=Arrays.copyOf(s,s.length+1);  //扩容  如果对内存没有要求可以直接声明一个大容量的数组
                        s[s.length-1]=str.substring(4,17);//获取子串保存到数组中
                    }
                }
            }
            in.close();
            for(int i=0;i<s.length;i++){
                System.out.println(s[i]);//打印输出
                }
            } catch (IOException e) {
        }
    }



}
